package cn.kailangtu.myapplication.tools;

import java.text.DecimalFormat;
import java.util.Calendar;

public class FomaterUtils {
    public static String format2f(float jingdu, float source, String unit) {
        // 检查 jingdu 是否为有效精度值
        if (jingdu <= 0) {
            throw new IllegalArgumentException("精度值必须大于 0");
        }

        // 根据精度值确定需要保留的小数位数
        int decimalPlaces = calculateDecimalPlaces(jingdu);

        // 构建格式化字符串 (例如: 0.0000)
        String pattern = "0";
        if (decimalPlaces > 0) {
            pattern += ".";
            pattern += "0".repeat(decimalPlaces); // 添加需要的小数位数
        }

        // 创建格式化对象
        DecimalFormat df = new DecimalFormat(pattern);

        // 先四舍五入到指定精度再格式化
        double rounded = Math.round(source / jingdu) * jingdu;
        return df.format(rounded) + unit;
    }

    // 计算需要保留的小数位数
    private static int calculateDecimalPlaces(float value) {
        if (value >= 1) {
            return 0; // 整数部分，不需要小数位
        }

        // 将值转换为字符串以计算小数位数
        String strValue = String.valueOf(value);

        // 处理科学计数法 (例如: 1.0E-4)
        if (strValue.toUpperCase().contains("E")) {
            return extractPlacesFromExponent(strValue);
        }

        // 处理普通小数 (例如: 0.0001)
        return extractPlacesFromDecimal(strValue);
    }

    // 从指数表示中提取小数位
    private static int extractPlacesFromExponent(String strValue) {
        String[] parts = strValue.toUpperCase().split("E");
        int exponent = Integer.parseInt(parts[1]);
        return Math.abs(exponent);
    }

    // 从小数字符串中提取小数位
    private static int extractPlacesFromDecimal(String strValue) {
        if (!strValue.contains(".")) {
            return 0;
        }

        String decimalPart = strValue.split("\\.")[1];
        // 去除尾随的零
        decimalPart = decimalPart.replaceAll("0+$", "");
        return decimalPart.isEmpty() ? 0 : decimalPart.length();
    }


    public static String get星期()
    {
        Calendar calendar = Calendar.getInstance();
        int day = calendar.get(Calendar.DAY_OF_WEEK);
        String dayStr;
        switch (day) {
            case Calendar.SUNDAY:
                dayStr = "星期日";
                break;
            case Calendar.MONDAY:
                dayStr = "星期一";
                break;
            case Calendar.TUESDAY:
                dayStr = "星期二";
                break;
            case Calendar.WEDNESDAY:
                dayStr = "星期三";
                break;
            case Calendar.THURSDAY:
                dayStr = "星期四";
                break;
            case Calendar.FRIDAY:
                dayStr = "星期五";
                break;
            case Calendar.SATURDAY:
                dayStr = "星期六";
                break;
            default:
                dayStr = "";
        }
        return dayStr;
    }
}
